var { sqlCheckType, err_reply, success_reply, success_reply2 } = require('../types/type.js') // 引入枚举类型

var dbConfig = require('../../util/dbconfig.js') // 引入dbconfig

var timeExchange = require('../.././tools/timeExchange.js'); // 封装好的时间工具
const { array } = require('i/lib/util.js');
const dbconfig = require('../../util/dbconfig.js');
// const { json } = require('express');
const { validateLoginState } = require('../base/base_validate.js') // 登录校验

/** 
 * @description 角色新增
*/
const role_add = async (req, res) => {
  
  // 1、校验登录状态
  const validateLogin = await validateLoginState(res, req, 'post', 'role_add')
  if (!validateLogin) return

  // 2、取出新增请求的参数（可能存在多个）
  const role_level = req.body.role_level ?? -1  // 角色等级
  const role_name = req.body.role_name ?? ''  // 角色名称
  const intruduce = req.body.intruduce ?? ''  // 角色介绍

  // 3、拼接权限，以逗号隔开
  //    '/layoutView/introduceProjectView/add,/layoutView/introduceProjectView/delete' 
  const arr = req.body.permissions ?? [] // 角色权限数组
  let action_permissions = ""
  arr.forEach(element => {
    const tag = element.toString()
    if(action_permissions.length === 0){
      action_permissions = `${tag}`
    } else {
      action_permissions = `${action_permissions},${tag}`
    }
  });
  

  console.log('取出新增请求的参数：')
  console.log(JSON.stringify(req.body))
  
  // 3、拼接SQL
  const sql_insert = `INSERT INTO ${`role`}(role_level, role_name, intruduce,action_permissions,create_time) VALUES(${role_level},'${role_name}','${intruduce}','${action_permissions}',NOW())`

  // 4、发送请求
  dbConfig.sqlConnect(sql_insert, [], (err, data) => {
    if(err) {
      console.log('\n打印下SQL：' + JSON.stringify(sql_insert))
      console.log('err信息：' + JSON.stringify(err))
      err_reply('role/add', res, '角色新增失败')
    } else {
      // console.log('角色新增返回：' + JSON.stringify(data))
      success_reply('role/add', res, '角色新增成功', data.insertId ?? '')
    }
  })
}

/** 
 * @description 角色删除
*/
const role_delete = async (req, res) => {
  
  // 1、校验登录状态
  const validateLogin = await validateLoginState(res, req, 'post', 'role_delete')
  if (!validateLogin) return

  // 2、取出要删除的ID（可能存在多个）
  const arr = req.body.params
  let condition = ""
  arr.forEach(element => {
    const element_id = element.id.toString()
    if(condition.length === 0){
      condition = `${element_id}`
    } else {
      condition = `${condition},${element_id}`
    }
  });
  
  // 3、拼接SQL
  const sql_delete = `DELETE FROM ${`role`} WHERE id in (${condition});`
  console.log('打印一下角色删除SQL: ' + sql_delete)
  
  //4、发送请求
  dbconfig.sqlConnect(sql_delete, [], (err, data) => {
    if(err) {
      console.log('\nerr信息：' + JSON.stringify(err))
      err_reply('role/query', res, '角色删除失败')
    } else {
      console.log('\n角色删除结果：' + JSON.stringify(data))
      success_reply('role/query', res, '角色删除成功！', data)
    }
  })
}

/** 
 * @description 角色更新
*/
const role_update = async (req, res) => {

  // 1、校验登录状态
  const validateLogin = await validateLoginState(res, req, 'post', 'role_update')
  if (!validateLogin) return

  // 2、取出要删除的ID（可能存在多个）
  const role_level = req.body.role_level ?? -1  // 角色等级
  const role_name = req.body.role_name ?? ''  // 角色名称
  const intruduce = req.body.intruduce ?? ''  // 角色介绍
  const id = req.body.id // 要删除哪个ID
  console.log(JSON.stringify(req.body))
  console.log('要更新的id是：' + id)
  // return
  // 3、拼接权限，以逗号隔开
  //    '/layoutView/introduceProjectView/add,/layoutView/introduceProjectView/delete' 
  const arr = req.body.permissions ?? [] // 角色权限数组
  let action_permissions = ""
  arr.forEach(element => {
    const tag = element.toString()
    if(action_permissions.length === 0){
      action_permissions = `${tag}`
    } else {
      action_permissions = `${action_permissions},${tag}`
    }
  });

  // 4、拼接SQL
  var sql_update = `UPDATE ${`role`} SET role_level=${role_level}, role_name='${role_name}', intruduce='${intruduce}',
  action_permissions='${action_permissions}' WHERE id='${id}'`
  
  // 5、发送请求
  dbConfig.sqlConnect(sql_update, [], (err, data) => {
    if(err) {
      console.log('err信息：' + JSON.stringify(err))
      err_reply('role/update', res, '角色更新失败')
    } else {
      console.log('角色更新返回：' + JSON.stringify(data))
      success_reply('role/update', res, '角色更新成功', data.insertId ?? '')
    }
  })
}

/** 
 * @description 角色查询
*/
const role_query = async (req, res) => {

  // 1、校验登录状态
  const validateLogin = await validateLoginState(res, req, 'get', 'role_query')

  if (!validateLogin) return

  // 2、取出分页查询的参数
  const limit = Number(req.query.limit) ?? 1000 //限制一次查询多少条，默认1000条
  const pageIndex = Number(req.query.pageIndex) ?? 1 // 要查询第几页数据
  if (pageIndex < 0) pageIndex = 1
  const offset = (pageIndex - 1) * limit
  if (offset < 0) offset = 0

  const sql_query = 'SELECT * FROM role;'

  if (limit > 0 && offset >= 0) {
    // 分页查询
    sql_query_limit = sql_query_limit + ` LIMIT ${limit} OFFSET ${offset};`
  }
  // 3、发送请求
  dbconfig.sqlConnect(sql_query, [], (err, data) => {
    if(err) {
      console.log('\nerr信息：' + JSON.stringify(err))
      err_reply('role/query', res, '角色列表获取失败')
    } else {
      console.log('\n角色列表查询结果：' + JSON.stringify(data))
      success_reply('role/query', res, '角色列表查询成功！', data)
    }
  })
}

module.exports = { role_add, role_delete, role_update, role_query }
